package com.fpno.mvc.controller;

import com.fpno.mvc.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Arrays;

@Controller
public class ParamController {

    @RequestMapping("/testServletAPI")
    //根据类型自动注入参数 形参位置的request表示当前请求
    public String testServletAPI(HttpServletRequest request){
        HttpSession session = request.getSession();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username："+username+"  password："+password);
        return "success";
    }

    @RequestMapping("/testParam")
    /*
    若请求所传输的请求参数中有多个同名的请求参数，此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数
    若使用字符串数组类型的形参，此参数的数组中包含了每一个数据
    若使用字符串类型的形参，此参数的值为每个数据中间使用逗号拼接的结果
    */
    /*
    required：设置是否必须传输此请求参数，默认值为true
    若设置为true时，则当前请求必须传输value所指定的请求参数，若没有传输该请求参数，且没有设置defaultValue属性，则页面报错400：
    Required String parameter 'xxx' is not present；
    若设置为false，则当前请求不是必须传输value所指定的请求参数，若没有传输，则注解所标识的形参的值为null*/
    /*defaultValue：不管required属性值为true或false，当value所指定的请求参数没有传输或传输的值为""时，则使用默认值为形参赋值*/
    public String testParam(@RequestParam(value = "user_name",required = false,defaultValue = "haha") String username,
                            String password, String[] hobby,
                            @RequestHeader(value = "Host",required = true,defaultValue = "haha") String host,
                            @CookieValue("JSESSIONID") String JSESSIONID){
        System.out.println("username："+username+"  password："+password+"  hobby："+ Arrays.toString(hobby));
        System.out.println("host:"+host);
        System.out.println("JSESSIONID:"+JSESSIONID);
        return "success";
    }

    @RequestMapping("/testBean")
    //实体类获取参数
    public String testBean(User user){
        System.out.println(user);
        return "success";
    }
}
